今天來完成事件的目標,但一天處理不完,會分成 2 天來敘述
首先先來處理 標記完成
的部分,這個最簡單
在 todo_list.py
增加一個函式
def toggle_finish(self):
self.finished = not self.finished
return self.finished
接著在 action_view.js
的 IronmanActionView
裡增加 events
屬性
增加對應的事件與函式
events: {
'change .finished': '_toggleFinish',
},
// ...
_toggleFinish: function (ev) {
let target = ev.currentTarget,
index = target.dataset.index;
if (!index) {
return true;
}
let data = this.todoList.at(parseInt(index));
this._rpc({
model: 'todo.list',
method: 'toggle_finish',
args: [[data.id]]
}).then(result => {
target.checked = !!result;
});
return true;
},
接著處理 刪除項目
因後端已經有先定義好 unlink
了,所以這裡只要加入事件就好
先在 events
增加一行
'click i.fa-times': '_removeItem',
接著增加函式
_removeItem: function (ev) {
const self = this;
let target = ev.currentTarget,
data_index = target.dataset.index;
if (!data_index) {
return true;
}
let index = parseInt(data_index);
let data = this.todoList.at(index);
if (!data) {
return true;
}
this._rpc({
model: 'todo.list',
method: 'unlink',
args: [[data.id]]
}).then(result => {
if (result) {
self.todoList.splice(index, 1);
self.renderElement();
}
});
},
重新整理網頁後,各位可以測試一下點後面的 x
有沒有動靜
是不是發現沒有動作,但記錄已經刪除了
而 action view 也不是 _render()
,是 renderElement()
為什麼呢?
請容許筆者混個一天賣個關子,明天帶各位看一下底層
回到問題,我們改一下 action view 的屬性名稱
把 template
改成 contentTemplate
完成後重新整理網頁,在嘗試看看是否刪除後畫面會有變化